מיונים א': מיון (Sorting) HeapSort. QuickSort תור עדיפויות / ערימה

Σχετικά έγγραφα
מבני נתונים ויעילות אלגוריתמים

(2) מיונים השאלות. .0 left right n 1. void Sort(int A[], int left, int right) { int p;

מבני נתונים ואלגוריתמים תרגול #3 נושאים: תור קדימויות/ערימה, עצים

עצי 2-3 תזכורת: בנים. דוגמאות: Chapter 19: B trees ( ) Chapter 15: Augmenting data structures ( )

תוכן הפרק: ,best case, average case דוגמאות 1. זמן - נמדד באמצעות מס' פעולות סיבוכיות, דוגמאות, שיפור בפקטור קבוע האלגוריתם. וגודלם. איטרטיביים. לקלט.

ל הזכויות שמורות לדפנה וסטרייך

מבני נתונים מבחן מועד א' סמסטר אביב תשס"ו

תרגול פעולות מומצאות 3

מבני נתונים ויעילות אלגוריתמים

צעד ראשון להצטיינות מבוא: קבוצות מיוחדות של מספרים ממשיים

תאריך הבחינה: שם המרצה: רפי כהן שם המתרגל: יסודות מבני נתונים שם הקורס:

2 יח"ל ) השלמה ל - 5 יח"ל) (50 נקודות) מעבר חוקי, ו-'שקר' אחרת.

אסימפטוטיים תוכנית הקורס עצי AVL עצי 2-3 עצי דרגות סיבוכיות משוערכת מיון מיון שימושים: גרפים איסוף אשפה

מבני נתונים (234218) 1

TECHNION - ISRAEL INSTITUTE OF TECHNOLOGY DEPARTMENT OF COMPUTER SCIENCE סמסטר אביב תשס"ו מס' סטודנט:

מבני נתונים הגבלת אחריות פרק - 1 אלגוריתמי מיון ואנליזה אסימפטוטית. מיון בועות Sort Bubble מאת : סשה גולדשטיין,

משוואות רקורסיביות רקורסיה זו משוואה או אי שוויון אשר מתארת פונקציה בעזרת ערכי הפונקציה על ארגומנטים קטנים. למשל: יונתן יניב, דוד וייץ

תורת הגרפים - סימונים

השאלות ידי מצביעים לילדים.

דוגמה: יהי T עץ בינארי כפי שמתואר בציור הבא:

פרק 13 רקורסיה רקורסיה רקורסיה רקורסיות פשוטות: חישוב עצרת. תמונת המחסנית ב-() factorial רקורסיות פשוטות: פיבונאצ'י

מבני נתונים 08a תרגול 8 14/2/2008 המשך ערמות ליאור שפירא

השאלות..h(k) = k mod m

עץץץץ AVL. עץ AVL הוא עץ חיפוש בינארי שמקיים את התנאי הבא: לכל צומת x בעץ גורם האיזון של x הוא 1, 0, או 1-. הגדרה: במילים אחרות: לכל צומת x בעץ,

חורף תש''ע פתרון בחינה סופית מועד א'

פתרון תרגיל 4 יסודות מבני נתונים סמסטר א' תשע"ה שאלה 1:

( n) ( ) ( ) שאלה 1: שאלה 2: שאלה 3: (n 5) = Θ. ב. אם f 1, f 2, g 1, g 2. .g 1 *g 2 = Ω(f 1 *f 2 ) , g. ג. ) n.n! = θ(n*2. n) f ( אז ד. אם ה. אם ו.

הגדרה: קבוצת פעילויות חוקית היא קבוצה בה כל שתי פעילויות

Hash Tables (המשך) ערבול (Hashing)

חלק א' שאלה 3. a=3, b=2, k=0 3. T ( n) היותר H /m.

תוכן עניינים I בעיות מיון 2 1 סימון אסימפטוטי... 2 II מבני נתונים 20 8 מבני נתונים מופשטים משפט האב גרפים... 37

Logic and Set Theory for Comp. Sci.

שדות תזכורת: פולינום ממעלה 2 או 3 מעל שדה הוא פריק אם ורק אם יש לו שורש בשדה. שקיימים 5 מספרים שלמים שונים , ראשוני. שעבורם

= 2. + sin(240 ) = = 3 ( tan(α) = 5 2 = sin(α) = sin(α) = 5. os(α) = + c ot(α) = π)) sin( 60 ) sin( 60 ) sin(

תאריך עדכון אחרון: 27 בפברואר ניתוח לשיעורין analysis) (amortized הוא טכניקה לניתוח זמן ריצה לסדרת פעולות, אשר מאפשר קבלת

Nir Adar גירסה 1.00 עמוד 1

כלליים זמן: S מחסנית, top(s) ראש המחסנית. (Depth First Search) For each unmarked DFS(v) / BFS(v) רקורסיבי. אלגוריתם :BFS

מבני נתונים מבחן מועד ב' סמסטר חורף תשס"ו

Nir Adar

שיטות אנליזה לניתוח זמנים משוערך Amortized Time Analysis

áùçîä éòãîì äîâîä ÌÈÏÈ ÂÁ

חידה לחימום. כתבו תכappleית מחשב, המקבלת כקלט את M ו- N, מחליטה האם ברצוappleה להיות השחקן הפותח או השחקן השappleי, ותשחק כך שהיא תappleצח תמיד.

מבוא למדעי המחשב מבוא למדעי המחשב מ' - תירגול 14

gcd 24,15 = 3 3 =

תרגיל 13 משפטי רול ולגראנז הערות

פתרון תרגיל 5 מבוא ללוגיקה ותורת הקבוצות, סתיו תשע"ד

ניתוח סיבוכיות - פונקציות רקורסיביות פיתוח טלסקופי

Trie מאפשר חיפוש, הכנסה, הוצאה, ומציאת מינימום (לקסיקוגרפי) של מחרוזות.

פתרון תרגיל 8. מרחבים וקטורים פרישה, תלות \ אי-תלות לינארית, בסיס ומימד ... ( ) ( ) ( ) = L. uuruuruur. { v,v,v ( ) ( ) ( ) ( )

תרגול מס' 6 פתרון מערכת משוואות ליניארית

םימתירוגלאל אוב מו םינותנ ינבמ ןייטשניבור רימא

מבני נתונים. אחרי שלב זה המשיכו והריצו את מיון מהיר על המערך. תארו את כל שלבי הרקורסיה, אך עתה אין צורך להיכנס לתיאור הריצה של.

מבני נתונים עצים שיעור 7

לדוגמה: במפורט: x C. ,a,7 ו- 13. כלומר בקיצור

brookal/logic.html לוגיקה מתמטית תרגיל אלון ברוק

הגדרה: מצבים k -בני-הפרדה

Lecture 10 of Geiger & Itai s slide brochure Median/sort. pivot. Geiger & Itai, 2001

שאלה 1 V AB פתרון AB 30 R3 20 R

אלגוריתמים קומבינטוריים סיכומים של תרגילי כיתה מסמסטרים קודמים בנושא מיון ובעיית הבחירה

דף פתרונות 7 נושא: תחשיב הפסוקים: צורה דיסיונקטיבית נורמלית, מערכת קשרים שלמה, עקביות

תשובות מלאות לבחינת הבגרות במתמטיקה מועד ג' תשע"ד, מיום 0/8/0610 שאלונים: 315, מוצע על ידי בית הספר לבגרות ולפסיכומטרי של אבירם פלדמן

[ ] Observability, Controllability תרגול 6. ( t) t t קונטרולבילית H למימדים!!) והאובז' דוגמא: x. נשתמש בעובדה ש ) SS rank( S) = rank( עבור מטריצה m

ניהול תמיכה מערכות שלבים: DFfactor=a-1 DFt=an-1 DFeror=a(n-1) (סכום _ הנתונים ( (מספר _ חזרות ( (מספר _ רמות ( (סכום _ ריבועי _ כל _ הנתונים (

אלגברה ליניארית (1) - תרגיל 6

' 2 סמ ליגרת ןורתפ םיפרגה תרותב םימתירוגלא דדצ 1 : הלאש ןורתפ רבסה תורעה

סדרות - תרגילים הכנה לבגרות 5 יח"ל

םינותנ ינבמ (הנכות ידימלתל)

( )( ) ( ) f : B C היא פונקציה חח"ע ועל מכיוון שהיא מוגדרת ע"י. מכיוון ש f היא פונקציהאז )) 2 ( ( = ) ( ( )) היא פונקציה חח"ע אז ועל פי הגדרת

מבני נתונים אדמיניסטרציה ד"ר אלכס סמורודניצקי, רוס 210, שני 5:30 4:15. ציון:

תרגול 1 חזרה טורי פורייה והתמרות אינטגרליות חורף תשע"ב זהויות טריגונומטריות

לוגיקה ותורת הקבוצות פתרון תרגיל בית 8 חורף תשע"ו ( ) ... חלק ראשון: שאלות שאינן להגשה נפריד למקרים:

מתכנס בהחלט אם n n=1 a. k=m. k=m a k n n שקטן מאפסילון. אם קח, ניקח את ה- N שאנחנו. sin 2n מתכנס משום ש- n=1 n. ( 1) n 1

םינותנ ינבמ 3 ליגרתמ תולאשל המוד תולאש טסל תונורתפ תולאשה

סיכום- בעיות מינימוםמקסימום - שאלון 806

מבני נתונים מדעי המחשב שאלון: מועד ב' תשע"ו מדעי המחשב פתרון בחינת הבגרות. Java שאלה 1. blog.csit.org.

חישוביות הרצאה 4 לא! זיהוי שפות ע''י מכונות טיורינג הוכחה: הגדרת! : f r

מבני נתונים מבחן מועד א' סמסטר חורף תשס"ו

יסודות לוגיקה ותורת הקבוצות למערכות מידע (סמסטר ב 2012)

מיון. 1 מיון ערימה (Heapsort) חלק I 1.1 הגדרת ערימה 0.1 הגדרה של המושג מיון מסקנה: הערך הכי גבוה בערימה נמצא בשורש העץ!

חידה לחימום. כתבו תכנית שהקלט שלה הוא מספר שלם n,

I. גבולות. x 0. מתקיים L < ε. lim אם ורק אם. ( x) = 1. lim = 1. lim. x x ( ) הפונקציה נגזרות Δ 0. x Δx

אוניברסיטת בר אילן מבני נתונים תרגולים מרצה: פרופ' שמואל טומי קליין סמסטר ב', תש"ע

גבול ורציפות של פונקציה סקלרית שאלות נוספות

פתרון תרגיל 6 ממשוואות למבנים אלגברה למדעי ההוראה.

תכנון דינאמי. , p p p והמטריצה המתקבלת היא בגודל

לוגיקה ותורת הקבוצות פתרון תרגיל בית 4 אביב תשע"ו (2016)

פתרון תרגיל מרחבים וקטורים. x = s t ולכן. ur uur נסמן, ur uur לכן U הוא. ur uur. ur uur

"קשר-חם" : לקידום שיפור וריענון החינוך המתמטי

תרגול 8: מטלאב לולאות

3-9 - a < x < a, a < x < a

אלגוריתמים בתורת הגרפים חלק ראשון

מתמטיקה בדידה תרגול מס' 13

מסדי נתונים רלציונים התצפית של כל משתמש על פי היישום ייצוג הנתונים על פי המודל כטבלאות שמירה בפועל על הדיסק

תכנון אלגוריתמים 2016 עבודה 1 שאלה 1 פתרון נתונות שתי בעיות. יש למצוא: אורך מסלול קצר ביותר המתחיל באחד מן הקודקודים s 1,..., s k ומסתיים ב t.

מתמטיקה בדידה תרגול מס' 5

c ארזים 26 בינואר משפט ברנסייד פתירה. Cl (z) = G / Cent (z) = q b r 2 הצגות ממשיות V = V 0 R C אזי מקבלים הצגה מרוכבת G GL R (V 0 ) GL C (V )

תרגילים באמצעות Q. תרגיל 2 CD,BF,AE הם גבהים במשולש .ABC הקטעים. ABC D נמצאת על המעגל בין A ל- C כך ש-. AD BF ABC FME

{ : Halts on every input}

משפטי בקרה ולולאות שעור מס. 3 כל הזכויות שמורות דר' דרור טובי המרכז האוניברסיטאי אריאל

מבנה נתונים סיכומי הרצאות

Transcript:

מיון (Sorting) void BubbleSort(int* A, int n){ for (i = ; i < n-; i++) for (j = n-; j >= i; j--) if ( a[j] > a[j+]) swap(&a[j], &a[j+]); מערך בן מספרים. קלט: מערך ובו המספרים מאוחסנים בסדר עולה (או יורד). פלט: שיטות מיון נאיביות דורשות זמן ).Θ(n לדוגמא, החלפת איברים סמוכים Sort) :(Bubble בכל שלב האיבר הקל ביותר שלא במקומו מבעבע למעלה הערה: בד"כ ממיינים רשומות לפי המפתח שלהם ולא סתם מספרים. לשם בחינת שיטות המיון מספיק לבחון את מיון המפתחות עצמם. כאשר הרשומות מכילות את ולא לרשומות משנה בכל שלב מצביעים אלגוריתם מיון אינפורמציה רבה, הרשומות עצמן. cs, Technion מיונים א': מיון ערימה () חומר קריאה לשיעור זה Chapter - Heapsort Chapter - Quicksort Lecture of Geiger & Itai s slide brochure www.cs.technion.ac.il/~dang/courseds Geiger & Itai, מיון בעזרת תור עדיפויות\ערימה - תור עדיפויות / ערימה - מיון בעזרת ערימה. אתחול: make_heap(). לכל בקלט: ) insert(,. כל עוד התור אינו ריק: Output max(); del_max() במימוש הנאיבי באמצעות עץ חיפוש: כל פעולת הכנסה, הוצאה, חיפוש בזמן (.(log סה"כ זמן ).( log בפעולות שהגדרנו, בניית ערימה מ- איברים יכולה לקחת ( Θ( log זמן כתלות בסדר ההכנסה. נגדיר פעולת ) make_heap(,,, היוצרת ערימה בת איברים (פעולה זו מחליפה את שני הצעדים הראשונים באלגוריתם המיון הרשום מעלה). נראה שמימוש יעיל של פעולה זו דורש () זמן. cs, Technion תור עדיפויות (או ערימה - (Heap הוא מבנה נתונים המוגדר ע"י הפעולות הבאות: צור ערימה ריקה. הכנס רשומה לערימה. הדפס את הרשומה עם המפתח הגדול ביותר בערימה. הוצא את הרשומה עם המפתח הגדול ביותר בערימה. MakeHeap() Insert(, ) Max() del_max() רשומה כל שלו: הנפוצים השימושים אחד לאור עדיפויות תור נקרא המבנה דרגת עדיפות. המשימה הבאה לבצוע היא המשימה (job) עם מגדירה משימה תור רגיל שבו עדיפות גבוהה מבנה זה מכליל בעלת העדיפות הגבוהה ביותר. ניתנת לפי סדר ההכנסה. מימוש נאיבי לערימה עץ חיפוש מאוזן. כל פעולת הכנסה והוצאה בזמן (.(log cs, Technion

פרוצדורת עזר (sift-down) בזמן הוצאה והכנסה יש לשמור על תכונת הערימה. לשם כך נשתמש בפרוצדורה ההופכת עץ בינרי כמעט שלם אשר עבורו מופרת תכונת הערימה רק בשורש בחזרה לערימה. העץ מורכב משורש המצביע לשתי ערימות: sift-down() כיצד נתקן את הערימה?. אם עלה, או גדול משני בניו סיים (העץ הנתון מהוה ערימה).. אחרת, החלף את השורש עם הבן בעל המפתח המקסימלי והמשך עם הערימה ששורשה. אלגוריתם זה נקרא,sift-down() "סינון כלפי מטה". cs, Technion מימוש ערימה מימוש ערימה בעזרת עץ בינרי כמעט שלם המפתח של הורה גדול או שווה ממפתחות ילדיו (תנאי זה נקרא תכונת הערימה). הסדר בין הילדים אינו מוגבל. דוגמא: כזכור מהרצאות קודמות, עץ כמעט שלם ניתן לייצג גם במערך: כאשר ההורה של צומת הוא הצומת /, בן שמאלי של צומת הוא הצומת ובן ימני הוא הצומת +. cs, Technion נכונות פרוצדורת make-heap נכונות: לאור סדר בחירת הצמתים בזמן שהאלגוריתם מבצע sift-down() הצומת כבר מצביע על עצים המקיימים את תכונת הערימה. לפיכך לאחר ביצוע. נוצרת ערימה ששורשה,sift-down() נימוק זה נכון לכל צומת, כולל השורש, ולפיכך בסיום מוחזרת ערימה. פרוצדורת make-heap מימוש ) :make_heap(,,, עבור על כל צמתי העץ הפנימיים כך שנעבור על הבנים לפני הוריהם (למשל בסדר.(Postorder לכל צומת בעץ בצע.sift_down() דוגמא: זמן הריצה של make-heap נתון ע"י (סכום הגבהים של כל הצמתים), שכן לכל צומת מבצעים (h()) תיקונים כאשר h() הוא גובה הצומת. ניתוח פשוט של סכום הגבהים נותן חסם גס של (,( log שכן הגובה של כל צומת חסום ע"י (.(log ניתוח מדויק יותר ייקח בחשבון שלרוב הצמתים גובה קטן. ניתוח כזה נותן חסם הדוק של.() cs, Technion

.(log ) זמן:.sift_down() (,, ){ make_heap(,,, ); While ( ) { Output max(); del_max(); כיצד ממומש?max() הדפס את השורש. זמן: (). כיצד ממומש?del_max() שים עלה אחרון במקום השורש. בצע del_max Sift_down(r) cs, Technion דוגמא: המשופר, עם שימוש ב :Make_Heap ניתוח זמנים של פרוצדורת make-heap זמן הריצה של make-heap נתון ע"י סכום הגבהים של כל הצמתים:. Σ h הוכחת המשפט: ישנו צומת בודד בגובה h, צמתים בגובה h, בגובה,h ובאופן כללי צמתים בגובה.h לפיכך סכום הגבהים (שנסמנו ב- ) מקיים: גובה h צמתים מס' צמתים h h = h = = h + + + + + משפט: עבור עץ בינרי שלם בגובה h הכולל. צמתים, סכום הגבהים קטן מ- = מסקנה: זמן הריצה של Make_Heap על איברים הוא.() h + h + h + + = h + h + h + + ע"י חיסור המשוואה הראשונה מהשניה: = h + < cs, Technion אנליזת - מקום וזמן דוגמא למיון סיבוכיות זמן: סך הזמן הנדרש מורכב מזמן בניית הערימה () בתוספת פעולות. del_max כלומר הזמן הכללי הוא: () + ( log ) = ( log ) סיבוכיות מקום: פרוצדורת מיון זו פועלת ללא הזדקקות למקום נוסף מעבר למערך המקורי (פרט לתוספת () למשתנים זמניים). המקום הנדרש הוא.() cs, Technion המערך הנתון (כמו בשקף ): המערך לאחר make_heap (כמו בשקף :( פעולות המיון: del sift del sift del sift del sift del sift המערך הממוין: cs, Technion

(המשך) המיון תוכנית מימוש sift_down לערימת מקסימום heap_sort(n){ for (int i = n/; i > ; i--) sift_down(i,n)); for (int i = n; i > ; i--){ swap(,i); sift_down(,i-); /* בנית הערימה */ /* המיון עצמו */ הערה: בתוכנית זו הפלט ממוין מהקטן לגדול כמודגם בשקפים ו-. יתרונות אלגוריתם למיון: זמן במקרה הגרוע ).( log לא דורש מקום עזר. sift_down(first, last) { for (int r = first; r <= last/; ){ if (*r = = last){ /* r has one child at *r */ if (a[r] < a[*r]) swap(r,*r); else { /* r has two children at *r and *r+ */ if (a[r] < a[*r] && a[*r] >= a[*r+]) { swap(a+r, a+*r); r *= ; else if (a[r] < a[*r + ] && a[*r + ] >= a[*r]) { swap(a+r, a+*r + ); r = *r + ; else break; cs, Technion cs, Technion מימוש sift_down לערימת מינימום ערימת מינימום sift_down(first, last) { for (int r = first; r <= last/; ){ if (r = = last){ /* r has one child at *r */ if (a[r] > a[*r]) swap(r,*r); else { /* r has two children at *r and *r+ */ if (a[r] > a[*r] && a[*r] <= a[*r+]){ swap(a+r, a+*r); r *= ; else if (a[r] > a[*r + ] && a[*r + ] <= a[*r]){ swap(a+r, a+*r + ); r *= *r + ; else break; cs, Technion תור עדיפויות מוגדר לעתים להיות ערימת מינימום, המוגדרת ע"י הפעולות: מימוש ערימת מינימום: באופן סימטרי למימוש ערימת מקסימום: בעזרת עץ בינרי כמעט שלם כאשר המפתח של הורה קטן או שווה ממפתחות ילדיו. (,, ){ make_heap(,,, ); While ( ) { Output min(); del_min(); MakeHeap(,,, ) אלגוריתם עם ערימת מינימום: צור ערימה המכילה את הרשומות.,, הכנס רשומה לערימה. הדפס את הרשומה עם המפתח הקטן ביותר בערימה. הוצא את הרשומה עם המפתח הקטן ביותר בערימה. Insert(, ) Min() del_min() cs, Technion

(המשך) מיון (Key *A, int l, int r){ if (l >= r) return ; int p = choose_pivot(a,l,r); int i = partition(a,l,r,p); (A, l, i-); (A,i+,r); נכונות בקצרה: איבר הציר נמצא במקום המתאים לו במערך אחרי ביצוע.Partition הקריאות הרקורסיביות ממיינות את האיברים שאחרי איבר הציר ולפני איבר הציר. < < < זמן המיון - תלוי באיבר הציר. נראה בהמשך:. במקרה הגרוע ביותר נקבל זמן ).Θ(. אם בכל שלב המערך נחצה בצורה קרובה לשווה, אז נקבל זמן (.( log. אם איבר הציר נבחר באקראי, נקבל זמן ריצה של ( ( log בממוצע. כלומר האטרקטיביות של אלגוריתם זה אינה נובעת מזמן הריצה המקסימלי. cs, Technion המיון משתמש בשיטת הפרד ומשול:.,, בכל שלב ממיינים את המערך נבחר איבר כלשהו מתוך [ [,, שיקרא איבר הציר (pivot) ויסומן ב-[ A[. = או נבחר את באקראי. למשל נבחר הפרד: סדר את [ [,, כך שכל האיברים הקטנים מאיבר הציר ימצאו בתאים ימצאו לו שווים או הגדולים האיברים וכל [ [,, בתאים.[] כאשר איבר הציר נמצא במקום,[,, [ ].[ +,, משול: מיין רקורסיבית את המערכים ] [,, ואת (Key *A, int l, int r){ if (l >= r) return ; int p = choose_pivot(a,l,r); int i = partition(a,l,r,p); (A, l, i-); (A,i+,r); הפרד: משול: השגרה partition מחזירה את האינדקס בו שמור איבר הציר אחרי הפעלתה. cs, Technion ניתוח זמנים במקרה הגרוע פרוצדורת - ההפרדה לפי איבר ציר Partition נתון מערך ממוין מהקטן לגדול. נניח שאיבר הציר נבחר להיות האיבר הקטן ביותר. בכל קריאה רקורסיבית המערך [ [, מתבצעת קריאה רקורסיבית למיון המערך.[ +, ] והמערך [, ] לשם המחשה נצייר את עץ הקריאות הרקורסיביות: n n n n- n n- n- n n int partition( KEY *A, int left, int right, int pivot){ swap (A+pivot, A+right); int i = left; for (int j=left; j < right; j++) if (A[j] < A[right]) { swap(a+i, A+j); i++; swap(a+right, A+i); return i; דוגמא:.pivot=left איבר הציר הוא המספר. זמן הריצה: = = + = + + = = Θ( ) cs, Technion העברת איבר הציר. זמן ריצה:.Θ() cs, Technion i

ניתוח מקום ניתוח זמנים n n n המקום שדרוש ל כולל: מערך הקלט. משתנים מקומיים (). מחסנית הרקורסיה. במקרה הגרוע עומק הרקורסיה הוא.() n- n- n- n n n זמן הריצה תלוי באיבר הציר. מקרה אופטימלי. איבר הציר הוא חציון. חלוקה מאוזנת. איבר הציר מחלק את המערך כך שכל חלק יכיל אחוז מסוים מגודל המערך (למשל %). נראה כעת שיטה להגבלת עומק הרקורסיה ל- ( (log במקרה הגרוע. = (/) + Θ() = Θ( log ) = (/) + (/) + Θ() = Θ( log ) מקרה ממוצע. איבר הציר הוא אקראי. = Θ + + ( ) on average = Θ( log ) on average cs, Technion עץ הקריאות הרקורסיביות הוא עץ בינרי ממוצע. נוסחת הנסיגה זהה לנוסחת הנסיגה לזמן בניית עץ חיפוש בינרי אקראי ומכאן זמן הריצה של Quicksort הוא ) ( log בממוצע. cs, Technion (Key *a, int l, int r) { while (l < r){ int p = choose_pivot(a,l,r); int i = partition(a,l,r,p); (a, l, i-); l = i + ; העלמת רקורסיית זנב Tail recursion elimination....-.. החלפת הקריאה הרקורסיבית השניה באיטרציה: בקומפיילרים מודרניים מימוש של העלמת רקורסיית זנב נעשה אוטומטית. cs, Technion........................ דוגמא להתנהגות מחסנית הרקורסיה (Key *a, int l, int r) { if (l >= r) return ; int p = choose_pivot(a,l,r); int i = partition(a,l,r,p); (a, l, i-); (a, i+, r);......-........................ בכל צומת מצוין טווח האינדקסים ולצד הצומת מצוין עומק המחסנית. cs, Technion

סיכום השיעור העלמת רקורסיה לפי גודלה בשיעור זה ראינו: ערימה(תור עדיפויות) מבנה נתונים חדש ומימוש של מבנה זה..( log ( שימוש בערימה למטרת מיון ללא זיכרון נוסף בזמן - Heapsort Quicksort והוכחת זמן ריצה ( ( log בממוצע. העלמת רקורסיה שיטה להקטנת עומק מחסנית הרקורסיה עבור תוכניות רקורסיביות. cs, Technion.... (Key *a, int l, int r) { while (l < r){ int p = choose_pivot(a,l,r); int i = partition(a,l,r,p); if (i - l < r i) { (a, l, i-); l = i + ; else { (a, i+, r); r = i - ;..-.... החלפת הקריאה הרקורסיבית הגדולה באיטרציה. כלומר, קריאה רקורסיבית רק על חלק המערך הקטן. התנהגות המחסנית על הדוגמא הקודמת (בבחירה זהה של איבר הציר): במימוש זה עומק הרקורסיה חסום ע"י () log כיוון שבכל קריאה רקורסיבית המערך קטן בלפחות חצי. cs, Technion........................ cs, Technion